---- 1、参数列表
---- 1.1 优惠券id--在Redis中的value值
--local voucherId = ARGV[1]
--
---- 1.2 用户id
--local userId = ARGV[2]
--
---- 2、数据key
---- 2.1库存的key
--local stockKey = 'seckill:voucher:' .. voucherId
--
---- 2.2订单的key
--local orderKey = 'seckill:order:' .. voucherId
--
--
---- 3、脚本业务
---- 3.1 先判断库存是否充足 get stockKey
--if(tonumber(redis.call('get', stockKey)) <= 0 ) then
--    -- 库存不足
--    return 1
--end
---- 3.2 判断用户是否重复下单 sismember orderKey userId--当前orderKey中是否存在userid
--if(redis.call('sismember', orderKey, userId) == 1) then
--    -- 用户重复下单
--    return 2
--end
--
----4 扣减库存，自增-1
--redis.call('incrby', stockKey, -1)
--
---- 4.1 将userId存入当前优惠券的set集合中--set集合数据不重复
--redis.call('sadd', orderKey, userId)
--return 0

---
-- 1、参数列表
-- 1.1 优惠券id--在Redis中的value值
local voucherId = ARGV[1]

-- 1.2 用户id
local userId = ARGV[2]

-- 2、数据key
-- 2.1库存的key
local stockKey = 'seckill:stock:' .. voucherId

-- 2.2订单的key
local orderKey = 'seckill:order:' .. voucherId

-- 3、脚本业务
-- 3.1 先判断库存是否充足 get stockKey
local stock = redis.call('get', stockKey)
if not stock or tonumber(stock) <= 0 then
    -- 库存不足或不存在
    return 1
end

-- 3.2 判断用户是否重复下单 sismember orderKey userId--当前orderKey中是否存在userid
if redis.call('sismember', orderKey, userId) == 1 then
    -- 用户重复下单
    return 2
end

-- 4 扣减库存，使用decr替代incrby -1更直观且安全
redis.call('decr', stockKey)

-- 4.1 将userId存入当前优惠券的set集合中--set集合数据不重复
redis.call('sadd', orderKey, userId)

return 0
